<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    function fn(){
        let a = 10;
        console.log(a);
    }
    // 栈：堆地址
    // 堆：函数内部的所有代码

    fn();
    // 根据堆地址，找到代码
    // 在运行内存中，开辟一个执行空间
    // 用来执行代码，执行结束后，空间被释放

    // 正常函数：可被释放的执行空间

    // 如何得到一个不被释放的执行空间？
    // 在执行空间外部，有一个地址（复杂数据）引用了执行空间内部的数据

    function fun(){
        let a = 10;
        return function (){
            a += 10;
            console.log(a);
        }
    }
    const f = fun();
    f();
    f();

    // 利用闭包，在一个循环内部的事件中没获取循环每次的计数器

    // 利用闭包，给 原本不能传参的回调函数 传参

    // 利用闭包，缓存程序的执行状态
        // 柯里化

    
















    
</script>
</html>